package com.geek.javase.ch18.videodemo.pattern.proxy.statics;

import java.util.concurrent.TimeUnit;

/*
 *@Date 2025/11/6
 *@Author wangpeng
 *@Description
 *  * * 需求1：日志追踪
 *  * 需求2：执行时间
 *  *
 *  * 一.静态代理  目标对象target  代理对象proxy
 *  * 1.在使用时,需要定义接口或者父类
 *  * 2.被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同父类。
 *  *
 *  * 二.静态代理使用方式
 *  * 代理对象与目标对象要实现相同的接口,然后在代理方法内调用目标对象的方法。
 *  *
 *  * 三.静态代理的优缺点
 *  * 优点：在不修改目标对象的功能前提下, 能通过代理对象对目标功能扩展
 *  * 缺点：
 *  *      1.因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类
 *  *      2.一旦接口增加方法,目标对象与代理对象都要维护
 *  *
 *  * 代理对象proxy
 */
//代理对象 proxy
public class StaticBankLogService implements IService{
    private IService target;
    public StaticBankLogService(IService target) {
        this.target = target;
    }
    @Override
    public void login(Long id, String pwd) {
        System.out.println("日志开始追踪：The Method login begin with [" + id + "," + pwd + "]");
        long startTime1 = System.currentTimeMillis();
        //调用相同的目标方法
        target.login(id, pwd);
        long endTime1 = System.currentTimeMillis();
        System.out.println("日志结束追踪：The Method login end with，耗时：" + (endTime1 - startTime1) + "ms");
    }

    @Override
    public void register(Long id, String name, String pwd) {
        System.out.println("日志开始追踪：The Method register begin with [" + id + "," + pwd + "]");
        long startTime2 = System.currentTimeMillis();
        //调用相同的目标方法
        target.register(id, name, pwd);
        long endTime2 = System.currentTimeMillis();
        System.out.println("日志结束追踪：The Method register end with，耗时：" + (endTime2 - startTime2) + "ms");
    }
}
